set1 = {1, 2, 3, 4, 5}

set2 = {4, 5, 6, 7, 8}

# 求两个集合的交集，方法1: intersection() 或 & 运算符
intersection1 = set1.intersection(set2)
intersection2 = set1 & set2
print(f"{set1}与{set2}的交集为{intersection1},{intersection2}")


# 求两个集合的交集:方法2: difference() 或 - 运算符,# 注意顺序很重要！
difference1 = set1.difference(set2)  # 在set1中但不在set2中 {1,23}
print(f"{set1}与{set2}的差集为:{difference1}")

difference2 = set2 - set1  # {6,7,8}
print(f"{set2}与{set1}的差集为:{difference2}")


# 3. 求两个集合并集 使用union 、| 方法或 | 运算符来实现
union_set1_set2 = set1.union(set2)
print(f"{set2}与{set1}的并集集为:{union_set1_set2}")


# 4.对称差集: 简单理解就是排除集合的交集后，再得到的并集
sym_diff1 = set1.symmetric_difference(set2)
sym_diff2 = set2 ^ set1
print(f"{set1}与{set2}的对称差集为={sym_diff1},{sym_diff2}")


A = {1, 2, 3}
B = {1, 2, 3, 4, 5}
C = {1, 2}

# 5.子集判断
print(f"{C}是{A}的子集={C.issubset(A)}")  # True - C是A的子集
print(f"{C}是{B}的子集={C.issubset(B)}")  # True - C是B的子集
print(C <= B)  # True - 等价写法

# 6.真子集（不能相等）
print(C < B)  # True - C是B的真子集
print(A < A)  # False - 集合不是自身的真子集

# 7.超集判断
print(f"{B}是{A}的超集={B.issuperset(A)}")  # True - B是A的超集
print(B >= A)  # True - 等价写法
print(B > A)  # True - B是A的真超集


# 不相交集合,可以使用 isdisjoint() 方法来判断两个集合是否没有交集（即是否没有任何共同元素）。
set1 = {1, 2, 3}
set2 = {4, 5, 6}
set3 = {3, 4, 5}

print(f"{set1} 和 {set2}  没有交集={set1.isdisjoint(set2)}")  # True - 没有共同元素
print(f"{set1} 和 {set3}  没有交集={set1.isdisjoint(set3)}")  # False
